Modern computer systems typically include one or more buses for interconnecting system components and for communicating with one or more processors. For instance, many modern desktop and server computer systems utilize the Peripheral Component Interconnect (“PCI”) bus architecture standard. Through the PCI buses in a computer system, communication can be made between devices, system memory, and the host processor.
Due to limitations on the number of devices that may be present on a single PCI bus imposed by the PCI bus architecture standard, and for performance-related reasons, most computer systems utilize multiple PCI buses. Buses can be added to an existing bus through the use of special devices called PCI-to-PCI bridges (“PPBs”). PPBs provide connectivity between a primary, or upstream bus, and a secondary, or downstream, bus. Many of today's desktop and server computer systems contain multiple PPBs and, therefore, may have many buses. For instance, several PPBs may be utilized on the system mainboard and additional PPBs may be installed in add-on adapter cards.
In order to access the devices connected to each bus in a computer system, each bus must be given a unique bus number. The PCI basic input/output system (“BIOS”) utilized in systems configured according to the PCI bus architecture standard numbers the buses present in a system at startup. The BIOS configures busses present in the system at startup according to the PCI Bus Architecture. By utilizing the numbers assigned by the PCI BIOS, the operating system executing on the computer can identify and communicate with all of the devices within a system, including those located downstream of PPBs.
At startup, the BIOS starts assigning PCI bus numbers starting from Bus 0 because the PCI BIOS is only aware of the existence of PCI Bus 0, the first bus number detected on the primary PCI bus. The PCI BIOS detects any additional buses and assigns numbers to each PCI bus and PPB it detects during system initialization. PCI bus numbers are reassigned by the PCI BIOS each time a system starts and the discovery process begins again.
The bus numbers that the PCI BIOS assigns to each discovered bus are determined by the order of detection. Therefore, when a computer system is modified by adding, removing, or moving an adapter card having one or more bridge devices to a different slot within the computer system, the bus numbers assigned to each bus may change. In fact, because bus numbers are typically assigned sequentially, the bus numbers for all buses discovered after a newly installed device containing a PPB will change.
The renumbering of buses can be problematic in some computer systems in which the operating system does not automatically check for new bus number assignments. If the bindings between a device driver and a renumbered device are not correct, it may appear that the device is not functioning correctly. In some cases, the binding between the driver and the device must be manually reset by a system administrator which can be troublesome. Moreover, the renumbering of buses following a system modification can cause device drivers for renumbered devices in a system to rescan and reconfigure for the newly assigned bus number. This process can be time consuming and slow down the startup of the computer system if many bus numbers have been renumbered.
It is with respect to these considerations and others that the various embodiments of the invention have been made.